#include "bsp_sram.h"



 

  
void init_circular_buffer(circular_buffer *cb) {  
    cb->buffer = (float *)(EXTERNAL_SRAM_BASE + BUFFER_OFFSET);  
    cb->pW = 0;  
    cb->pR = 0;  

    // 初始化外部SRAM区域为0（首次使用时，耗时操作，需评估必要性）  
    for (uint32_t i = 0; i < BUFFER_SIZE; i++) {  
        cb->buffer[i] = 0.0f;  
    }  
}  

// 写入函数  
void push_circular_buffer(circular_buffer *cb, float data) {  
    uint32_t next_w = (cb->pW + 1) % BUFFER_SIZE;  
    if (next_w != cb->pR) {  // 缓冲区未满  
        cb->buffer[cb->pW] = data;  // 直接写外部SRAM  
        cb->pW = next_w;  
    }  
}  

// 读取函数  
float pop_circular_buffer(circular_buffer *cb) {  
    if (cb->pR == cb->pW) {  // 缓冲区空  
        return -1.0f;  // 空标志（建议改为错误码枚举，增强健壮性）  
    } else {  
        float data = cb->buffer[cb->pR];  // 直接读外部SRAM  
        cb->pR = (cb->pR + 1) % BUFFER_SIZE;  
        return data;  
    }  
}  
